
// 全局方法
exports.install = function(Vue) {
  /**
   * table映射数据  data所有数据  needID显示字段 returnID返回字段 item当前传入数据  
   * campaign_id: 当广告组为单品推广是，需要选择关联小说
  */
  Vue.prototype.$Map = function( data,needID,returnID,item,campaign_id ) {
    // console.info(data,needID,returnID,item,campaign_id,'data')
    // 商品
    if( needID === 'productPlatform' ){
      for (const ele of data) {
        if( ele.id === campaign_id ){
          if( ele.delivery_related_num !== 'CAMPAIGN_DPA_SINGLE_DELIVERY' ) return ''
        }
      }
      if( !item ) return '请选择'
      return item[returnID] 
    }

    if( !needID ) needID = returnID
    let value = null
    if( !item ) return '请选择'

    // 判断传入数据格式
    if(!data){
      value = Object.prototype.toString.call(item) === '[object String]' ? item : item[returnID]
    }else {
      if( Object.prototype.toString.call(item) === '[object Object]' ){
        data.forEach( ele => {
          if( ele[needID] === item[needID] ){
            value = ele[returnID]
          }
        });
      }else {
        data.forEach( ele => {
          if( ele[needID] === item ){
            value = ele[returnID]
          }
        });
      }
    }
    return value
  }
  /**
   * @param str 要匹配的字符串
   * @param arr 被匹配的数据
   * @param keys ( array ) 如果被匹配的数据是对象，则需要传入被匹配的keys属性
  */
  Vue.prototype.$searchStr = function (str, arr, keys) {
    let newList = []
    // 要匹配字符串的首个字符
    let startChar = str.charAt(0)
    // 要匹配字符串的字符长度
    let strLength = str.length
    if(keys){
      for (let i = 0; i < arr.length; i++) {
        let isExist = false
        for (let k = 0; k < keys.length; k++) {
          let keyValue = arr[ i ][ keys[k] ].toString()  // 被匹配的字符串
          for (let j = 0; j < keyValue.length; j++) {
            // 把原有数据转化为小写，输入数据也转化为纯小写，实现模糊匹配,如区分大小写，可删除toLowerCase()
            if (keyValue.charAt(j).toLowerCase() === startChar.toLowerCase()) {
              if (keyValue.substring(j).substring(0, strLength).toLowerCase() === str.toLowerCase()) {
                // 模糊匹配到的字符存在表示arr[i]中存在str
                isExist = true
                break
              }
            }
          }
        }
        if (isExist === true) {
          newList.push(arr[i])
        }
      }
    }
    // 最后返回这个新数组
    return newList
  }
  /* 
    select数据处理  { value:'ENABLE',label:'开启' }
    required : 是否需要 { value:0,label:'无' }  字段
    tostring : 是否需要转字符串
    confID : 匹配字段
  **/ 
  Vue.prototype.$selectOptions = function(res,required,tostring,confID) {
    let options = []
    if( !confID ) confID = 'id'
    if(required === 'required'){
      options.push({ value:0,label:'无' })
    }
    res.map(item => {
      options.push({ label: item.name, value: item[confID] })
    })
    return options
  }

  /**
   * 数组对象深拷贝 
   * @param target 拷贝对象
   * */
  Vue.prototype.$deepCopy = function (target) {
    let result;
    // 如果当前需要深拷贝的是一个对象的话
    if (typeof target === 'object') {
      // 如果是一个数组的话
      if (Array.isArray(target)) {
        result = []; // 将result赋值为一个数组，并且执行遍历
        for (let i in target) {
          // 递归克隆数组中的每一项
          result.push(this.$deepCopy(target[i]))
        }
      // 判断如果当前的值是null的话；直接赋值为null
      } else if(target===null) {
        result = null;
      // 判断如果当前的值是一个RegExp对象的话，直接赋值    
      } else if(target.constructor===RegExp){
        result = target;
      }else {
        // 否则是普通对象，直接for in循环，递归赋值对象的所有值
        result = {};
        for (let i in target) {
          result[i] = this.$deepCopy(target[i]);
        }
      }
     // 如果不是对象的话，就是基本数据类型，那么直接赋值
    } else {
      result = target;
    }
    // 返回最终结果
    return result;
  }

  /**
   * @Description 随机生成 数字+字母
  */
  Vue.prototype.$randomStr = function () {
    //创建一个空字符，用于存放随机数/字母
    var num = "";
    //生成随机字符库 (验证码四位，随机数三种，取公倍数12,所以循环4次。也可以是120次，1200次。)
    for (var i = 0; i < 3; i++) {
      let num1 = Math.round(Math.random() * (0 - 9) + 9); //生成0-9的随机数
      num = num + num1; //将生成的字符进行字符串拼接
    }
    //创建一个空字符，用于存放随机字母
    var AZ = ""
    var az = ""
    //生成随机字符库 (随机字母)
    for (var i = 0; i < 1; i++) {
      az = az + String.fromCharCode(Math.round(Math.random() * (97 - 122) + 122)); //生成a-z
      AZ = AZ + String.fromCharCode(Math.round(Math.random() * (65 - 90) + 90)); //生成A-Z
    }
    var str = AZ +az+ num
    return str
  }

  /**
   * @Description 循环显示某个字段
   * @param obj 
   * @param str
  */
  Vue.prototype.$cycle = function (str,obj) {
    let data = '暂无数据'
    for (const item of obj) {
      if( item.value === str ) data = item.label
    }
    return data
  }

   /**
   * @Description 判断数据类型
  */
    Vue.prototype.$isType = function (data) {
      return Object.prototype.toString.call(data).match(/\[object\s([a-zA-Z0-9]+)\]/)[1].toLowerCase();
    }

  /**
   * @Description 计算字符串长度 (中、英文、符号)
   * @param {String} val 
  */
  Vue.prototype.$getStringWidth = function (val) {
    let len = 0;
    for (let i = 0; i < val.length; i++) {
      // charCodeAt : 返回字符串第一个字符的 Unicode 编码:
      let length = val.charCodeAt(i);  
      if( length >= 0 && length <= 128 ) {
        len += 1;
      } else {
        len += 2;
      }
    }
    return len;
  }

  /**
   *  头部(请求数据)提示
  */
  Vue.prototype.$Tip = function ( res ) {
    if( Object.prototype.toString.call(res) === "[object String]"){
      this.$message.info( res );
    }else if( Object.prototype.toString.call(res) === "[object Array]"){
      
    }else if( Object.prototype.toString.call(res) === "[object Object]"){
      if( res.code === 'SUCCESS' ) this.$message.success(res.message)
      else this.$message.error( res.message )
    }else {
      
    }
  }
  
  // Vue.prototype.$symbol = function () {
  //   return Symbol();
  // }

}


